In this notebook we work with cables. First we create code that takes as input a braid word of a knot K and outputs a braid words of its (p,q)-cable. We also present code that creates out of this alphabetical braid words, which can be used for example to put these cables into KnotJob.

In a second step, we use this code to obstruct certain cables from being positive or braid positive.

In [1]:
import string
import snappy

def torus_knot(p,q):
    '''Returns a braid word of a positive torus knot.'''
    return q*list(range(1,p))
            
def braid_index(word):
    '''Returns the rbaid index of a word'''
    return max([abs(x) for x in word])+1

def writhe(word):
    '''Returns the writhe of a braid word.'''
    wr=0
    for w in word:
        wr=wr+sign(w)
    return wr

def cable(word,p,q):
    '''Returns a braid word of the cable. (For positive p and arbitrary q.)'''
    cable_word=[]
    for i in word:
        subword=[]
        for t in range(0,p):
            subword=subword+list(range(p*abs(i)+t,p*(abs(i)-1)+t,-1))
        if i<0:
            subword=[-j for j in subword]
        cable_word=cable_word+subword
    wr=writhe(word)
    if (q-p*wr)<0:
        cable_word=cable_word+(p*wr-q)*list(range(-1,-(p-1)-1,-1))
    if (q-p*wr)>=0:
        cable_word=cable_word+(-p*wr+q)*list(range(1,(p-1)+1,+1))
    return cable_word

def braid_word_to_letters(word):
    '''Returns an alphabetical describtion of the braid word.'''
    upper=list(string.ascii_uppercase)
    lower=list(string.ascii_lowercase)
    stringword=''
    for x in word:
        for letter in lower:
            if x==ord(letter) - 96:
                stringword=stringword+letter
                break
        for letter in upper:
            if -x==ord(letter) - 64:
                stringword=stringword+letter
                break
    return stringword

For example we get braid words of T(2,2g+1)(2,0) and T(2,2g+1)(2,1), which we can then load in Mathematica or KnotJob to verify that its first Khovanov homology is non-vanishing.

In [2]:
for g in range(1,11):
    print('T(2,2*',g,'+1)_(2,0)')
    print(cable(torus_knot(2,2*g+1),2,0))
    print(braid_word_to_letters(cable(torus_knot(2,2*g+1),2,0)))
    print('T(2,2*',g,'+1)_(2,1)')
    print(cable(torus_knot(2,2*g+1),2,1))
    print(braid_word_to_letters(cable(torus_knot(2,2*g+1),2,1)))
T(2,2* 1 +1)_(2,0)
[2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, -1, -1, -1, -1, -1, -1]
bacbbacbbacbAAAAAA
T(2,2* 1 +1)_(2,1)
[2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, -1, -1, -1, -1, -1]
bacbbacbbacbAAAAA
T(2,2* 2 +1)_(2,0)
[2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]
bacbbacbbacbbacbbacbAAAAAAAAAA
T(2,2* 2 +1)_(2,1)
[2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1]
bacbbacbbacbbacbbacbAAAAAAAAA
T(2,2* 3 +1)_(2,0)
[2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]
bacbbacbbacbbacbbacbbacbbacbAAAAAAAAAAAAAA
T(2,2* 3 +1)_(2,1)
[2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]
bacbbacbbacbbacbbacbbacbbacbAAAAAAAAAAAAA
T(2,2* 4 +1)_(2,0)
[2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]
bacbbacbbacbbacbbacbbacbbacbbacbbacbAAAAAAAAAAAAAAAAAA
T(2,2* 4 +1)_(2,1)
[2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]
bacbbacbbacbbacbbacbbacbbacbbacbbacbAAAAAAAAAAAAAAAAA
T(2,2* 5 +1)_(2,0)
[2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]
bacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbAAAAAAAAAAAAAAAAAAAAAA
T(2,2* 5 +1)_(2,1)
[2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]
bacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbAAAAAAAAAAAAAAAAAAAAA
T(2,2* 6 +1)_(2,0)
[2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]
bacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbAAAAAAAAAAAAAAAAAAAAAAAAAA
T(2,2* 6 +1)_(2,1)
[2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]
bacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbAAAAAAAAAAAAAAAAAAAAAAAAA
T(2,2* 7 +1)_(2,0)
[2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]
bacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
T(2,2* 7 +1)_(2,1)
[2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]
bacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
T(2,2* 8 +1)_(2,0)
[2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]
bacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
T(2,2* 8 +1)_(2,1)
[2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]
bacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
T(2,2* 9 +1)_(2,0)
[2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]
bacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
T(2,2* 9 +1)_(2,1)
[2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]
bacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
T(2,2* 10 +1)_(2,0)
[2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]
bacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
T(2,2* 10 +1)_(2,1)
[2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]
bacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbbacbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

Next, we show that in many examples (conjecturally all) that we study in the papers the cables are not braid positive whenever q < p w(K). We use again Ito's obstruction.

In [3]:
var('a,b,v,z')

R = PolynomialRing(ZZ, ['a','b'])

def HOMFLY(word):
    '''
    Computes the HOMFLY polynomial.
    '''
    K=snappy.Link(braid_closure=word)
    K.simplify(mode='global')
    L=K.sage_link()
    h(v,z) = L.homfly_polynomial('v', 'z', 'az')
    return h(v,z)

def normalized_HOMFLY(word):
    '''
    Given the braid word of an fibered knot. Returns Ito's normalized version of the HOMFLY.
    '''
    L=snappy.Link(braid_closure=word)
    alex=L.exterior().alexander_polynomial()
    g=alex.degree()/2
    h(v,z)=HOMFLY(word)
    homfly=(h((-a)^(-1/2),b^(1/2))*(-a)^(-g)).expand()
    return homfly

def is_positive(poly):
    '''Returns if the polynomial is positive.'''
    m=matrix(R(poly).dict())
    for x in m:
        for y in x:
            if y<0:
                return False
    return True
In [4]:
def gcd(p,q):
# Create the gcd of two positive integers.
    while q != 0:
        p, q = q, p%q
    return p
def is_coprime(x, y):
    return gcd(x, y) == 1
In [5]:
for r in range(2,5):
    for s in range(3,7):
        if is_coprime(r,s):
            word=torus_knot(r,s)
            for p in range(2,3):
                for q in range(0,p*writhe(word)):
                    if is_coprime(p,q):
                        cable_word=cable(word,p,q)
                        if is_positive(normalized_HOMFLY(cable_word)):
                            print('T(',r,',',s,')_(',p,',',q,') has positive HOMFLYPT polynomial.')
                        else:
                            print('T(',r,',',s,')_(',p,',',q,') has NON-positive HOMFLYPT polynomial and thus is NOT braid positive.')   
T( 2 , 3 )_( 2 , 1 ) has NON-positive HOMFLYPT polynomial and thus is NOT braid positive.
T( 2 , 3 )_( 2 , 3 ) has NON-positive HOMFLYPT polynomial and thus is NOT braid positive.
T( 2 , 3 )_( 2 , 5 ) has NON-positive HOMFLYPT polynomial and thus is NOT braid positive.
T( 2 , 5 )_( 2 , 1 ) has NON-positive HOMFLYPT polynomial and thus is NOT braid positive.
T( 2 , 5 )_( 2 , 3 ) has NON-positive HOMFLYPT polynomial and thus is NOT braid positive.
T( 2 , 5 )_( 2 , 5 ) has NON-positive HOMFLYPT polynomial and thus is NOT braid positive.
T( 2 , 5 )_( 2 , 7 ) has NON-positive HOMFLYPT polynomial and thus is NOT braid positive.
T( 2 , 5 )_( 2 , 9 ) has NON-positive HOMFLYPT polynomial and thus is NOT braid positive.
T( 3 , 4 )_( 2 , 1 ) has NON-positive HOMFLYPT polynomial and thus is NOT braid positive.
T( 3 , 4 )_( 2 , 3 ) has NON-positive HOMFLYPT polynomial and thus is NOT braid positive.
T( 3 , 4 )_( 2 , 5 ) has NON-positive HOMFLYPT polynomial and thus is NOT braid positive.
T( 3 , 4 )_( 2 , 7 ) has NON-positive HOMFLYPT polynomial and thus is NOT braid positive.
T( 3 , 4 )_( 2 , 9 ) has NON-positive HOMFLYPT polynomial and thus is NOT braid positive.
T( 3 , 4 )_( 2 , 11 ) has NON-positive HOMFLYPT polynomial and thus is NOT braid positive.
T( 3 , 4 )_( 2 , 13 ) has NON-positive HOMFLYPT polynomial and thus is NOT braid positive.
T( 3 , 4 )_( 2 , 15 ) has NON-positive HOMFLYPT polynomial and thus is NOT braid positive.
T( 3 , 5 )_( 2 , 1 ) has NON-positive HOMFLYPT polynomial and thus is NOT braid positive.
T( 3 , 5 )_( 2 , 3 ) has NON-positive HOMFLYPT polynomial and thus is NOT braid positive.
T( 3 , 5 )_( 2 , 5 ) has NON-positive HOMFLYPT polynomial and thus is NOT braid positive.
T( 3 , 5 )_( 2 , 7 ) has NON-positive HOMFLYPT polynomial and thus is NOT braid positive.
T( 3 , 5 )_( 2 , 9 ) has NON-positive HOMFLYPT polynomial and thus is NOT braid positive.
T( 3 , 5 )_( 2 , 11 ) has NON-positive HOMFLYPT polynomial and thus is NOT braid positive.
T( 3 , 5 )_( 2 , 13 ) has NON-positive HOMFLYPT polynomial and thus is NOT braid positive.
T( 3 , 5 )_( 2 , 15 ) has NON-positive HOMFLYPT polynomial and thus is NOT braid positive.
T( 3 , 5 )_( 2 , 17 ) has NON-positive HOMFLYPT polynomial and thus is NOT braid positive.
T( 3 , 5 )_( 2 , 19 ) has NON-positive HOMFLYPT polynomial and thus is NOT braid positive.
T( 4 , 3 )_( 2 , 1 ) has NON-positive HOMFLYPT polynomial and thus is NOT braid positive.
T( 4 , 3 )_( 2 , 3 ) has NON-positive HOMFLYPT polynomial and thus is NOT braid positive.
T( 4 , 3 )_( 2 , 5 ) has NON-positive HOMFLYPT polynomial and thus is NOT braid positive.
T( 4 , 3 )_( 2 , 7 ) has NON-positive HOMFLYPT polynomial and thus is NOT braid positive.
T( 4 , 3 )_( 2 , 9 ) has NON-positive HOMFLYPT polynomial and thus is NOT braid positive.
T( 4 , 3 )_( 2 , 11 ) has NON-positive HOMFLYPT polynomial and thus is NOT braid positive.
T( 4 , 3 )_( 2 , 13 ) has NON-positive HOMFLYPT polynomial and thus is NOT braid positive.
T( 4 , 3 )_( 2 , 15 ) has NON-positive HOMFLYPT polynomial and thus is NOT braid positive.
T( 4 , 3 )_( 2 , 17 ) has positive HOMFLYPT polynomial.
T( 4 , 5 )_( 2 , 1 ) has NON-positive HOMFLYPT polynomial and thus is NOT braid positive.
T( 4 , 5 )_( 2 , 3 ) has NON-positive HOMFLYPT polynomial and thus is NOT braid positive.
T( 4 , 5 )_( 2 , 5 ) has NON-positive HOMFLYPT polynomial and thus is NOT braid positive.
T( 4 , 5 )_( 2 , 7 ) has NON-positive HOMFLYPT polynomial and thus is NOT braid positive.
T( 4 , 5 )_( 2 , 9 ) has NON-positive HOMFLYPT polynomial and thus is NOT braid positive.
T( 4 , 5 )_( 2 , 11 ) has NON-positive HOMFLYPT polynomial and thus is NOT braid positive.
T( 4 , 5 )_( 2 , 13 ) has NON-positive HOMFLYPT polynomial and thus is NOT braid positive.
T( 4 , 5 )_( 2 , 15 ) has NON-positive HOMFLYPT polynomial and thus is NOT braid positive.
T( 4 , 5 )_( 2 , 17 ) has NON-positive HOMFLYPT polynomial and thus is NOT braid positive.
T( 4 , 5 )_( 2 , 19 ) has NON-positive HOMFLYPT polynomial and thus is NOT braid positive.
T( 4 , 5 )_( 2 , 21 ) has NON-positive HOMFLYPT polynomial and thus is NOT braid positive.
T( 4 , 5 )_( 2 , 23 ) has NON-positive HOMFLYPT polynomial and thus is NOT braid positive.
T( 4 , 5 )_( 2 , 25 ) has NON-positive HOMFLYPT polynomial and thus is NOT braid positive.
T( 4 , 5 )_( 2 , 27 ) has NON-positive HOMFLYPT polynomial and thus is NOT braid positive.
T( 4 , 5 )_( 2 , 29 ) has NON-positive HOMFLYPT polynomial and thus is NOT braid positive.

For 3-cables the obstruction seems to not work. However, for 4-cables it works well again:

In [6]:
for r in range(2,4):
    for s in range(3,4):
        if is_coprime(r,s):
            word=torus_knot(r,s)
            for p in range(3,4):
                for q in range(0,p*writhe(word)):
                    if is_coprime(p,q):
                        cable_word=cable(word,p,q)
                        if is_positive(normalized_HOMFLY(cable_word)):
                            print('T(',r,',',s,')_(',p,',',q,') has positive HOMFLYPT polynomial.')
                        else:
                            print('T(',r,',',s,')_(',p,',',q,') has NON-positive HOMFLYPT polynomial and thus is NOT braid positive.')   
T( 2 , 3 )_( 3 , 1 ) has positive HOMFLYPT polynomial.
T( 2 , 3 )_( 3 , 2 ) has positive HOMFLYPT polynomial.
T( 2 , 3 )_( 3 , 4 ) has positive HOMFLYPT polynomial.
T( 2 , 3 )_( 3 , 5 ) has positive HOMFLYPT polynomial.
T( 2 , 3 )_( 3 , 7 ) has positive HOMFLYPT polynomial.
T( 2 , 3 )_( 3 , 8 ) has positive HOMFLYPT polynomial.
In [7]:
for r in range(2,4):
    for s in range(3,4):
        if is_coprime(r,s):
            word=torus_knot(r,s)
            for p in range(4,5):
                for q in range(0,12):
                    if is_coprime(p,q):
                        cable_word=cable(word,p,q)
                        if is_positive(normalized_HOMFLY(cable_word)):
                            print('T(',r,',',s,')_(',p,',',q,') has positive HOMFLYPT polynomial.')
                        else:
                            print('T(',r,',',s,')_(',p,',',q,') has NON-positive HOMFLYPT polynomial and thus is NOT braid positive.')   
T( 2 , 3 )_( 4 , 1 ) has NON-positive HOMFLYPT polynomial and thus is NOT braid positive.
T( 2 , 3 )_( 4 , 3 ) has NON-positive HOMFLYPT polynomial and thus is NOT braid positive.
T( 2 , 3 )_( 4 , 5 ) has NON-positive HOMFLYPT polynomial and thus is NOT braid positive.
T( 2 , 3 )_( 4 , 7 ) has NON-positive HOMFLYPT polynomial and thus is NOT braid positive.
T( 2 , 3 )_( 4 , 9 ) has NON-positive HOMFLYPT polynomial and thus is NOT braid positive.
T( 2 , 3 )_( 4 , 11 ) has NON-positive HOMFLYPT polynomial and thus is NOT braid positive.

Next, we work with an iterated cable of the trefoil: First we take the (2,3)-cable of T(2,3) and compute its genus.

In [8]:
cable(torus_knot(2,3),2,3)
Out[8]:
[2, 1, 3, 2, 2, 1, 3, 2, 2, 1, 3, 2, -1, -1, -1]
In [10]:
snappy.Link(braid_closure=cable(torus_knot(2,3),2,3)).knot_floer_homology()
Out[10]:
{'L_space_knot': True,
 'epsilon': 1,
 'fibered': True,
 'modulus': 2,
 'nu': 3,
 'ranks': {(-3, -6): 1, (-2, -5): 1, (0, -2): 1, (2, -1): 1, (3, 0): 1},
 'seifert_genus': 3,
 'tau': 3,
 'total_rank': 5}

Thus the (2,11)-cable of the (2,3)-cable of T(2,3) is again an L-space knot. We verify that:

In [17]:
print(cable(cable(torus_knot(2,3),2,3),2,11))
[4, 3, 5, 4, 2, 1, 3, 2, 6, 5, 7, 6, 4, 3, 5, 4, 4, 3, 5, 4, 2, 1, 3, 2, 6, 5, 7, 6, 4, 3, 5, 4, 4, 3, 5, 4, 2, 1, 3, 2, 6, 5, 7, 6, 4, 3, 5, 4, -2, -1, -3, -2, -2, -1, -3, -2, -2, -1, -3, -2, -1, -1, -1, -1, -1, -1, -1]
In [14]:
D=snappy.Link(braid_closure=cable(cable(torus_knot(2,3),2,3),2,11))
In [15]:
D
Out[15]:
<Link: 1 comp; 67 cross>
In [39]:
D.sage_link().plot()
Out[39]:
In [16]:
D.knot_floer_homology()
Out[16]:
{'L_space_knot': True,
 'epsilon': 1,
 'fibered': True,
 'modulus': 2,
 'nu': 11,
 'ranks': {(-11, -22): 1,
  (-10, -21): 1,
  (-5, -12): 1,
  (-4, -11): 1,
  (-3, -10): 1,
  (-2, -9): 1,
  (0, -6): 1,
  (2, -5): 1,
  (3, -4): 1,
  (4, -3): 1,
  (5, -2): 1,
  (10, -1): 1,
  (11, 0): 1},
 'seifert_genus': 11,
 'tau': 11,
 'total_rank': 13}

It is not braid positive as we can see from Ito's obstruction:

In [40]:
normalized_HOMFLY(cable(cable(torus_knot(2,3),2,3),2,11))
Out[40]:
-a^7*b^8 - a^6*b^9 - 16*a^7*b^7 - 19*a^6*b^8 - a^5*b^9 - 105*a^7*b^6 - 154*a^6*b^7 - 20*a^5*b^8 - 365*a^7*b^5 - 696*a^6*b^6 - 172*a^5*b^7 - 2*a^4*b^8 - 726*a^7*b^4 - 1924*a^6*b^5 - 830*a^5*b^6 - 34*a^4*b^7 + a*b^10 + b^11 - 836*a^7*b^3 - 3355*a^6*b^4 - 2460*a^5*b^5 - 242*a^4*b^6 + a^2*b^8 + 21*a*b^9 + 22*b^10 - 540*a^7*b^2 - 3664*a^6*b^3 - 4608*a^5*b^4 - 936*a^4*b^5 - 2*a^3*b^6 + 16*a^2*b^7 + 190*a*b^8 + 210*b^9 - 179*a^7*b - 2393*a^6*b^2 - 5406*a^5*b^3 - 2136*a^4*b^4 - 25*a^3*b^5 + 106*a^2*b^6 + 969*a*b^7 + 1141*b^8 - 23*a^7 - 836*a^6*b - 3788*a^5*b^2 - 2921*a^4*b^3 - 120*a^3*b^4 + 376*a^2*b^5 + 3059*a*b^6 + 3893*b^7 - 117*a^6 - 1418*a^5*b - 2316*a^4*b^2 - 278*a^3*b^3 + 771*a^2*b^4 + 6176*a*b^5 + 8687*b^6 - 212*a^5 - 961*a^4*b - 321*a^3*b^2 + 921*a^2*b^3 + 7953*a*b^4 + 12818*b^5 - 156*a^4 - 170*a^3*b + 615*a^2*b^2 + 6314*a*b^3 + 12376*b^4 - 31*a^3 + 206*a^2*b + 2871*a*b^2 + 7565*b^3 + 26*a^2 + 648*a*b + 2736*b^2 + 51*a + 507*b + 33

However, we do not know if it is positive. The obstruction for positivity coming from the knot polynomials are all fulfilled.

In [18]:
D.jones_polynomial()
Out[18]:
q^22 + q^26 + q^30 - q^32 + q^36 - q^38 + q^46 - q^48 + q^50 - 2*q^52 - q^56 - q^60 + q^62 - q^64 + q^66 + q^70 + q^74 - q^82 - q^86 + q^88
In [22]:
hom=HOMFLY(cable(cable(torus_knot(2,3),2,3),2,11))
In [24]:
hom.expand()
Out[24]:
z^22/v^22 + 22*z^20/v^22 + 210*z^18/v^22 - z^20/v^24 + 1141*z^16/v^22 - 21*z^18/v^24 + 3893*z^14/v^22 - 190*z^16/v^24 + 8687*z^12/v^22 - 969*z^14/v^24 + z^16/v^26 + 12818*z^10/v^22 - 3059*z^12/v^24 + 16*z^14/v^26 + 12376*z^8/v^22 - 6176*z^10/v^24 + 106*z^12/v^26 - 2*z^16/v^30 + z^18/v^32 + 7565*z^6/v^22 - 7953*z^8/v^24 + 376*z^10/v^26 + 2*z^12/v^28 - 34*z^14/v^30 + 20*z^16/v^32 - z^18/v^34 + 2736*z^4/v^22 - 6314*z^6/v^24 + 771*z^8/v^26 + 25*z^10/v^28 - 242*z^12/v^30 + 172*z^14/v^32 - 19*z^16/v^34 + 507*z^2/v^22 - 2871*z^4/v^24 + 921*z^6/v^26 + 120*z^8/v^28 - 936*z^10/v^30 + 830*z^12/v^32 - 154*z^14/v^34 + z^16/v^36 + 33/v^22 - 648*z^2/v^24 + 615*z^4/v^26 + 278*z^6/v^28 - 2136*z^8/v^30 + 2460*z^10/v^32 - 696*z^12/v^34 + 16*z^14/v^36 - 51/v^24 + 206*z^2/v^26 + 321*z^4/v^28 - 2921*z^6/v^30 + 4608*z^8/v^32 - 1924*z^10/v^34 + 105*z^12/v^36 + 26/v^26 + 170*z^2/v^28 - 2316*z^4/v^30 + 5406*z^6/v^32 - 3355*z^8/v^34 + 365*z^10/v^36 + 31/v^28 - 961*z^2/v^30 + 3788*z^4/v^32 - 3664*z^6/v^34 + 726*z^8/v^36 - 156/v^30 + 1418*z^2/v^32 - 2393*z^4/v^34 + 836*z^6/v^36 + 212/v^32 - 836*z^2/v^34 + 540*z^4/v^36 - 117/v^34 + 179*z^2/v^36 + 23/v^36
In [26]:
hom(1,z) #conway
Out[26]:
z^22 + 21*z^20 + 189*z^18 + 952*z^16 + 2940*z^14 + 5733*z^12 + 7008*z^10 + 5157*z^8 + 2107*z^6 + 420*z^4 + 35*z^2 + 1
In [27]:
def Cromwell_Morton_obstruction(homfly):
    '''
    Takes the homfly of a knot and checks the Cromwell-Morton obstruction of beeing valid.
    '''
    f=homfly(0.9,z)
    coef=f.coefficients()
    sign=coef[0].sign()
    for c in coef:
        if c.sign()!=sign:
            #check the negative knot
            f=homfly(1.1,z)
            coef=f.coefficients()
            sign=coef[0].sign()
            for c in coef:
                if c.sign()!=sign:
                    return False
    return True
In [31]:
hom(1.1,z)
Out[31]:
0.122845973573672*z^22 + 2.60108582062602*z^20 + 23.6738368203136*z^18 + 121.082570826811*z^16 + 381.891046852488*z^14 + 767.224464088709*z^12 + 980.267685653997*z^10 + 773.918427963490*z^8 + 357.120358493308*z^6 + 88.9705025521310*z^4 + 10.7209981767843*z^2 + 0.472357579174404